# -*- coding: utf-8 -*-
"""
Created on Wed Aug 23 15:34:41 2023

@author: skunk69
"""

import json

chinese_name = u'阳性和阴性症状量表'
english_name = 'the Positive and Negative Syndrome Scale'
abbreviation = 'PANSS'
category = u'精神病学临床量表'

outline = u"""阳性和阴性症状量表(the Positive and Negative Syndrome Scale, PANSS)是为评定不同类型和程度的精神分裂症症状而设计和标准化的(Kay，Fiszbein，和Opler，1987)。PANSS最初是将两个精神病评定工具：简明精神病量表(Overall和Gbrhan，1962)和精神病理评定量表(Singh和Kay，1975)合并改编而成。PANSS选择最能代表精神分裂症的阳性和阴性特征的项目。但是，随着它的演化，作者意识到需要进行更符合心理测量原理的规范化修改，使评定技术标准化，包括更精确的指导语来引出和评估精神病症状。由此，修改和扩充了精神检查过程及所有评定项目，从而为PANSS精神检查的操作、每个评定参数的清晰定义、7级精神病理水平的分级标准和每个项目的级间等距，提供了精确的指导。"""

instruction = u"""PANSS主要评定最近一周内患者的精神症状及现场交谈情况，每个项目包括7级操作性评分标准，按精神病理水平递增的7级评分为：1-无；2-很轻；3-轻度；4-中度；5-偏重；6-重度；7-极重度。"""

with open('PANSS.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

lines_items = [l.strip() for l in lines[0:33]]
lines_items_definition = [l.strip() for l in lines[33:63]]
lines_rating_standard = [l.strip() for l in lines[63::]]

items = {}
for num,line in enumerate(lines_items):
    key,value = line.split('.',maxsplit=1)
    items[key] = value

items_definition = {}
for line in lines_items_definition:
    key,value = line.split('.',maxsplit=1)
    items_definition[key] = value

rating_standard = {}
for num,line in enumerate(lines_rating_standard[::6]):
    item = {}
    key,value = line.split('.',maxsplit=1)
    item[key] = value.strip()
    rate = {}
    lines_rate = lines_rating_standard[num*6+1:(num+1)*6]
    for line in lines_rate:
        k,v = line.split('.',maxsplit=1)
        rate[k] = v.strip()
    rating_standard[key] = [item,rate]

reverse_items = []

"""
我国PANSS合作研究小组的因子分析得出5因子：
1）阴性因子，包括P5,N1,N2,N3,N4,N6,G7,G13,G16
2）认知因子，包括P2,N5,N7,G5,G10,G11,G15
3）阳性因子，包括P1,P3,P6,G9
4）兴奋因子，包括P4,P7,G8,G14
5）焦虑抑郁因子，包括G1,G2,G3,G4,G6,G12。
"""
scales = [u'阴性因子',u'认知因子',u'阳性因子',u'兴奋因子',u'焦虑抑郁因子']
scales_items = [
    ['P5','N1','N2','N3','N4','N6','G7','G13','G16'],# 阴性因子
    ['P2','N5','N7','G5','G10','G11','G15'],# 认知因子
    ['P1','P3','P6','G9'],# 阳性因子
    ['P4','P7','G8','G14'],# 兴奋因子
    ['G1','G2','G3','G4','G6','G12'],# 焦虑抑郁因子
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{key for key in items.keys()}
print(f'complementary set= {check_set}')

"""
量表作者归纳了有6组症状群（syndromes）：
1）反应缺乏，由N1,N2,G7,G10组成；
2）思维障碍，由P2,P3,P5,G9组成；
3）激活性；P4,G4,G5组成；
4）偏执，由P6,P7,G8组成；
5）抑郁，由G1,G2,G3,G6组成；
6）补充（攻击性），由P4,P7,G6,S1,S2,S3组成。
"""
syndromes = [u'反应缺乏',u'思维障碍',u'激活性',u'偏执',u'抑郁',u'补充（攻击性）'] 
syndromes_items = [
    ['N1','N2','G7','G10'],# 反应缺乏
    ['P2','P3','P5','G9'],# 思维障碍
    ['P4','G4','G5'],# 激活性
    ['P6','P7','G8'],# 偏执
    ['G1','G2','G3','G6'],# 抑郁
    ['P4','P7','G6','S1','S2','S3'],# 补充（攻击性）
    ]

factors = []
factors_scales = []
rating = [u'无',u'很轻',u'轻度',u'中度',u'偏重',u'重度',u'极重']
score_rules = list(range(1,8))

contents = {
    'instruction':instruction,
    'items':items,
    'items_definition':items_definition,
    'rating_standard':rating_standard,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'syndromes':syndromes,
    'syndromes_items':syndromes_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《阳性和阴性症状量表》属于一个他评量表。评定注意事项如下：
由经量表使用训练的精神科医师对患者做精神检查后，全面综合检查中患者的言语表达、检查者的观察和知情人提供的有关信息进行评定。会谈开始应该有一段开放式的交谈，以便观察患者的语言量和流畅性、主动性等。
配套的临床检查提纲（SCI-PANSS）是一个很好地辅助完成整个量表检查的工具。同一评分等级内的症状是并列关系，不要求所有描述要点都必须观察到才能评定此级。如果同时符合几个评分等级，原则上取高分。
评定时间范围通常指定为评定前一周内的全部信息。"""

reliability = u"""经测试，PANSS的4个量表均呈正态分布，没有重大偏移或峰态出现。各量表α系数为0.73~0.83。精简任何一项均不再进一步提高。一般精神病量表的分半信度为0.80。各量表重测信度指数为0.77~0.89。"""
validity = u"""阳性量表与阴性量表间互为负相关，它们的相互排斥，支持了量表的结构效度。
我国的PANSS合作研究小组测试了190例符合CCMD-2-R精神分裂症诊断标准的病人，平均总分83.67，阳性量表分22.84，阴性量表分22.18，一般精神病量表分38.66。与BPRS的相关系数为0.8879。其25，50，75百分位的PANSS原始评分值分别为：总分73，81，92分；阳性分量表19，22，26分；阴性分量表16，21，27分；一般精神病理量表33，37，43分；复合量表分6，2，7分。与BPRS的相关系数为0.8879。因子分析得出了5个因子：阴性因子，认知因子，阳性因子，兴奋因子和焦虑抑郁因子。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""PANSS量表主要统计指标分别为：阳性量表分，阴性量表分，一般的精神病理学得分和总分。
（1）阳性量表分：组成阳性量表的7项得分总和。可能得分范围是7-49分。
（2）阴性量表分：组成阴性量表的7项得分总和。可能得分范围是7-49分。
（3）一般精神病理量表分：组成一般精神病理量表的16项得分总和。可能得分范围是16-112分。
（4）复合量表分：阳性量表分减去阴性量表分。可能得分范围从一41到＋42。
（5）总分（粗分）：30项得分总和。
（6）标准分（T分）：根据粗分查常模表获得。
（7）症状群分：为组成症状群的项目得分之和。量表作者归纳了有6组症状群：1）反应缺乏，由N1，N2，G7，G10组成；2）思维障碍，由P2，P3，P5，G9组成；3）激活性；P4，G4，G5组成；4）偏执，由P6，P7，G8组成；5）抑郁，由GI，G2，G3，G6组成；6）补充（攻击性），由P4，P7，G6，S1，S2，S3组成。
（8）因子分：为组成各因子项目的得分之和。因各常模的因子分析结果不尽相同，各因子的组成和计算也有所不同。"""

applications = u"""与经典的简明精神量表BPRS相比PANSS兼顾了精神分裂症的阳性症状和阴性症状及一般精神病理症状，较全面地反映了精神病理全貌。明确的项目定义和分级评定标准，大大提高了量表评定的可操作性和一致性。若能应用它的半定式检查提纲，更能进一步提高评定的效率和一致性。因PANSS的项目数较多，评分标准规定详细，在提高量表品质的同时，影响了临床应用的便利性，不如BPRS来得方便，但用于研究中的优越性是毋庸置疑的。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)